
package modele;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import modele.exceptions.FormationInexistanteException;

/**
 * Classe Formation représentant une formation du master (ex : M1 FIC, M2 FA)
 */
public class Formation {

    private int id;
    private String nom;
  
    /**
     * Constructeur
     * @param id : identifiant de la formation
     * @param nom : libellé de la formation
     */
    public Formation(int id, String nom){
        this.id = id;
        this.nom = nom;
       
    }

    /**
     * Retourne l'identidiant de la formation
     * @return id : identfiant de la formation
     */
    public int getId(){
        return id;
     }


    /**
     * Retourne le nom de la formation
     * @return nom
     */
    public String getNomFormation(){
        return nom;
    }


    /**
     * Renvoie la formation sous une forme d'affichage classique
     * @return le nom de la formation
     */
    @Override
    public String toString()
    {
        return getNomFormation();
    }

    //Méthodes statiques d'accès à la base de données

     /**
     * Retourne la liste de toutes les formations
     * @return toutesLesFormations
     */
    public static List<Formation> getToutesLesFormations() throws SQLException
    {
        List<Formation> resultat = new ArrayList<Formation>();

        String requete = "Select id_formation, intitule from formation2 order by id_formation;";
        Connection c = ConnexionBD.getConnection();
        Statement s = c.createStatement();
        ResultSet rs = s.executeQuery(requete);

        while(rs.next())
        {
            Integer idF = (Integer) rs.getObject(1);
            String intitule = (String) rs.getObject(2);
            Formation f = new Formation(idF, intitule);
            resultat.add(f);
        }

        c.close();

        return resultat;
    }

    /**
     * Retourne une formation dont on a l'identifiant
     * @param id_formation : l'identifiant de la formation
     * @return formation
     */
    public static Formation getFormation(int id_formation) throws FormationInexistanteException, SQLException
    {
        Formation resultat = null;

        String requete = "Select intitule from formation2 where id_formation = ?;";
        Connection c = ConnexionBD.getConnection();
        PreparedStatement ps = c.prepareStatement(requete);
        ps.setInt(1, id_formation);
        ResultSet rs = ps.executeQuery();

        if(rs.next())
        {
            //La formation existe

            String intitule = (String) rs.getObject(1);

            resultat = new Formation(id_formation, intitule);

        }
        else
        {
            //La formation n'existe pas
            throw new FormationInexistanteException();
        }

        c.close();

        return resultat;
    }
}
